package com.zh.chat.service.impl;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

import org.apache.log4j.Logger;

import com.zh.chat.entity.UDPProtocol;
import com.zh.chat.net.TCPNetDTO;
import com.zh.chat.net.UDPNetDTO;
import com.zh.chat.net.UDPNetDTOImpl;

public class NetServiceImpl {
	UDPNetDTOImpl udpDTO = null;
	TCPNetDTO tcpDTO = null;
	private Logger log = Logger.getLogger(NetServiceImpl.class);
	public NetServiceImpl(){
		
	}
	
	public UDPNetDTOImpl getUdpDTO() {
		return udpDTO;
	}
	
	public void setUDPNetDTO(UDPNetDTOImpl netDTO) {
		this.udpDTO = netDTO;
	}
	
	public TCPNetDTO getTcpDTO() {
		return tcpDTO;
	}
	
	public void setTCPNetDTO(TCPNetDTO tcpDTO){
		this.tcpDTO = tcpDTO;
	}
	/**
	 * 客户端向服务器发出回应
	 * @param protocol
	 */
	public void responseCheck(UDPProtocol protocol){
		Long targetId = protocol.getRequestId();
		protocol.setCode(UDPProtocol.RESP_KEEP_ONLINE);
		protocol.setRequestId(0L);
		protocol.setTargetId(targetId);
		try {
			udpDTO.send(protocol);
		} catch (IOException e) {
			log.error("检查用户"+protocol.getTargetId()+"在线,回复失败");
			e.printStackTrace();
		}
	}
	
	/**
	 * 服务器向客户端发出验证在线的请求
	 * @param protocol
	 */
	public void requestCheck(UDPProtocol protocol){
		protocol.setCode(UDPProtocol.REQ_KEEP_ONLINE);
		try {
			udpDTO.send(protocol);
		} catch (IOException e) {
			log.error("检查用户"+protocol.getTargetId()+"在线,失败");
			e.printStackTrace();
		}
	}
	
	public UDPProtocol recive(){
		return udpDTO.recive();
	}
	
	/**
	 * 通用发送数据对象的方法
	 * @param protocol
	 */
	public void send(UDPProtocol protocol) {
		try {
			udpDTO.send(protocol);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
//	
//	public void sendJsonToUser(UDPProtocol protocol ,String json){
//		ServerSocket server = tcpDTO.getFreeSocket();
//		try{
//		Socket socket = tcpDTO.getClientSocket(server);
//		String str = tcpDTO.reciveStr(socket);
//		}catch(RuntimeException e){
//			UDPProtocol prot = protocol;
//			prot.setClazz("".getClass().getName());
//			prot.setData(e.getMessage());
//			prot.setCode(UDPProtocol.RESP_FRIENDS_LIST);
//			try {
//				udpDTO.send(prot);
//			} catch (IOException e1) {
//				e1.printStackTrace();
//			}
//		}
//	}
}
